package com.kkb.kkbadmin.service.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.kkb.kkbadmin.dao.SpecialDao;
import com.kkb.kkbadmin.domain.Special;
import com.kkb.kkbadmin.service.SpecialService;
import com.kkb.kkbcommon.exception.Asserts;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author: Administrator
 * @ClassName：SpecialServiceImpl
 * @User：面向对象面向君，不负代码不负卿
 * @Data：2021/8/15
 * @Time：17:21
 */
@Service
public class SpecialServiceImpl extends ServiceImpl<SpecialDao, Special> implements SpecialService {

    /**
     * 添加一个特点类
     *
     * @param special 特点类对象
     */
    @Override
    public void addSpecial(Special special) {
        boolean save = this.save(special);
        if (!save) {
            Asserts.fail("添加失败");
        }
    }

    /**
     * 通过Id删除一个特点
     *
     * @param specialId 特点类id
     */
    @Override
    public void deleteById(Long specialId) {
        Special obj = this.getById(specialId);
        if (ObjectUtil.isNull(obj)) {
            Asserts.fail("没有对应id的特点信息");
        }
        boolean remove = this.removeById(specialId);
        if (!remove) {
            Asserts.fail("删除失败");
        }
    }

    /**
     * 根据主键id更新数据
     *
     * @param specialId 特点类id
     * @param special   特点类实体
     */
    @Override
    public void updateById(Long specialId, Special special) {
        special.setId(specialId);
        boolean update = this.updateById(special);
        if (!update) {
            Asserts.fail("更新失败");
        }
    }

    /**
     * 根据id查询
     *
     * @param specialId 特点类id
     * @return 特点类实体
     */
    @Override
    public Special getBySpecialId(Long specialId) {
        Special special = this.getById(specialId);
        if (ObjectUtil.isNull(special)) {
            Asserts.fail("未查到特点类信息");
        }
        return special;
    }

    /**
     * 多条件分页查询
     *
     * @param special  条件
     * @param pageNum  当前页
     * @param pageSize 每页条数
     * @return 分页数据
     */
    @Override
    public PageInfo<Special> findPage(Special special, Integer pageNum, Integer pageSize) {
        return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> {
            this.selectByCondition(special);
        });
    }

    /**
     * 根据特点类的条件返回list
     *
     * @param special 特点类搜索条件
     * @return 特点类信息list
     */
    @Override
    public List<Special> selectByCondition(Special special) {
        if (ObjectUtil.isNull(special)) {
            return this.list();
        }
        String msg = special.getMsg();
        String detail = special.getDetail();
        // 条件查询案例（参考代码和群内文档）
        List<Special> list = this.lambdaQuery()
                // eq方法，参数：
                // boolean：是否加入到where条件中, 函数：实体类的get方法, val:where条件的值（如：where id=1）
                .like(ObjectUtil.isNotEmpty(msg), Special::getMsg, msg)
                .like(ObjectUtil.isNotEmpty(detail), Special::getDetail, detail)
                .orderByDesc(Special::getCreateTime)
                .list();
        if (CollUtil.isEmpty(list)) {
            Asserts.fail("未查到特点类信息");
        }
        return list;
    }
}
